package practice;

/**
 * 扫描指定⽬录，并找到名称或者内容中包含指定字符的所有普通⽂件（不包含⽬录）
 */

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

/**
 *   1.让用户输入一个目录路径
 *   2.对用户输入的目录路径进行校验（1.存在 2.是个目录）
 *   3.让用户输入一个关键字
 *   4.校验关键字是否有效（不能为空，和空格）
 *   5.扫描目录下的所有子目录和文件，如果是目录进入其内部扫描，如果是文件
 *     先看一下名字是否包含关键字，如果没有则，扫描其中内容看一下是否包含
 *     关键字，如果是则打印出来
 */
public class DEMO_04 {
    public static void main(String[] args) throws IOException {
        System.out.println("请输入一个你要扫描的路径");
        Scanner scanner=new Scanner(System.in);
        String path=scanner.nextLine();
        File file=new File(path);
        if(!file.exists()) {
            System.out.println("目录不存在");
            return ;
        }
        if (!file.isDirectory()){
            System.out.println("你输入不是一个目录");
            return;
        }
        System.out.println("请输入你要查询的文件关键字");
        String key=scanner.nextLine();
        if(key.isBlank()||key.isEmpty()){
            System.out.println("你输入的关键字不合法");
            return ;
        }
        scan(file,key);
        scanner.close();
    }

    private static void scan(File file, String key) throws IOException {
        File[] files = file.listFiles();
        if(files.length==0){
            return;
        }
        for (File f:files
             ) {
            if(f.isDirectory()){
                scan(f,key);
            }else{
                if(f.getName().contains(key)){
                    System.out.println(f.getCanonicalFile());
                }else{
                    StringBuffer stringBuffer=new StringBuffer();
                    try(InputStream inputStream=new FileInputStream(f);Scanner scanner=new Scanner(inputStream)){
                        while (true) {
                            if(!scanner.hasNextLine()){
                                break;
                            }
                            String s = scanner.nextLine();
                            stringBuffer.append(s);
                        }
                        if(stringBuffer.indexOf(key)!=-1){
                            System.out.println(f.getCanonicalFile());
                        }
                    }
                }
            }
        }
    }
}
